import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;

import javax.swing.JFrame;

import es.uca.gii.csi.Shield.util.Config;
import es.uca.gii.csi.Shield.data.Agente;
import es.uca.gii.csi.Shield.gui.FrmMain;


	


	import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

	import es.uca.gii.csi.Shield.data.Agente;
import es.uca.gii.csi.Shield.data.Data;
import es.uca.gii.csi.Shield.util.Config;

public class Main 
	{

/*
		public void set(JFrame frame){
			this.frame = frame;
		}
		
		public JFrame get(){
			return frame;
		}
		
		private JFrame frame;
		
		/**
		 * Launch the application.
		 */
		/*
		public static void main(String[] args) {
			EventQueue.invokeLater(new Runnable() {
				public void run() {
					try {
						FrmMain window = new FrmMain();
						window.frmMain.setVisible(true);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			});
		}*/
	
		/// MAIN ORIGINAL ///
	
		               
		private static void LoadDriver() throws Exception
		{
			Class.forName(Config.Properties(Data.getPropertiesUrl())
						  .getProperty("jdbc.driverClassName")).newInstance();
		}
		
		
		
	    private static void TestConnection(String sTable,String sField,int iCount) throws Exception
	    {
		   
	       Connection connection = null;
	       ResultSet resultSet = null;
	       try 
	       {
	           connection = Data.Connection();
	           resultSet = connection.createStatement().executeQuery(
	        		   String.format("SELECT %s FROM %s limit (%d-1),%d"
	        				   ,sField,sTable,iCount,iCount));
	           
	           while (resultSet.next())
	        	   System.out.println(sField + ": " + resultSet.getString(sField) + " ");
	       }catch (SQLException ee) { throw ee; }
	       finally 
	       {
	           if (resultSet != null) resultSet.close();
	           if (connection != null) connection.close();
	       }
	    }
	    
	    
		public static void TestInsertion(String sNombre, int iAnoServicio, 
				Calendar tFechaValidezLicencia ) throws Exception
		{
			Connection connection = null;
		    ResultSet resultSet = null;
		    try 
		       {
		           connection = Data.Connection();
		           Agente agenteCreado = Agente.New (sNombre, iAnoServicio, tFechaValidezLicencia);
		           agenteCreado.toString();
		       }
		       catch (SQLException ee) { throw ee; }
		       finally 
		       {
		           if (resultSet != null) resultSet.close();
		           if (connection != null) connection.close();
		       }
		}
		
		
		public static void TestSelect(String sNombre, int iAnosServicio,
						     		  Calendar tFechaValidezLicencia) throws Exception
		{
			ArrayList<Agente> agentes = Agente.Select(sNombre, iAnosServicio, tFechaValidezLicencia);
			Iterator<Agente> iterAgentes = agentes.iterator();
	        Agente agenteActual;
            while(iterAgentes.hasNext())
            {
               System.out.println("hola");
        	   agenteActual = iterAgentes.next();
        	   System.out.println(agenteActual.toString());
            }
		}
		
		
		public static void TestUpdate( Agente Agente) throws Exception
		{
			Agente.Update();
		}
		
		
		public static void TestDelete(Agente Agente) throws Exception
		{
			Agente.Delete();
		}
		
		public static void main(String[] args) throws Exception
	{
			int iIdentificador;
			String sNombre;
			int iAnosServicio, iDia, iMes, iAno;
			Calendar tCal;
			LoadDriver();
			BufferedReader dato = new BufferedReader( new InputStreamReader(System.in));
			System.out.println( "Elige una opcion" );
			System.out.println( "1- Registrar Agente" );
			System.out.println( "2- Buscar Agente" );
			System.out.println( "3- Actualizar datos Agente" );
			System.out.println( "4- Eliminar Agente" );
			
			int opcion = Integer.parseInt(dato.readLine());
			switch(opcion)
			{
				case 1: System.out.println("Inserta nombre");
			        	sNombre = dato.readLine();
			        	System.out.println("Inserta anos de servicio");
			        	iAnosServicio = Integer.parseInt(dato.readLine());
			        	System.out.println("Introduce la fecha de validez de la licencia (dd/mm/yyyy)");
			        	System.out.println("Dia: "); iDia = Integer.parseInt(dato.readLine());
			        	System.out.println("Mes: "); iMes = Integer.parseInt(dato.readLine());
			        	System.out.println("Año: "); iAno = Integer.parseInt(dato.readLine());
			        	
			        	tCal = Calendar.getInstance();
			        	tCal.set(iAno,iMes,iDia);
			        	
			 
			        	TestInsertion(sNombre,iAnosServicio,tCal);
			        	break;
			        	
				case 2: System.out.println("Inserta nombre");
			        	sNombre = dato.readLine();
			        	System.out.println("Inserta anos de servicio");
			        	iAnosServicio = Integer.parseInt(dato.readLine());
			        	System.out.println("Introduce la fecha de validez de la licencia (dd/mm/yyyy)");
			        	System.out.println("Dia: "); iDia = Integer.parseInt(dato.readLine());
			        	System.out.println("Mes: "); iMes = Integer.parseInt(dato.readLine());
			        	System.out.println("Año: "); iAno = Integer.parseInt(dato.readLine());
			        	
			        	
			        	tCal = Calendar.getInstance();
			        	tCal.set(iAno,iMes,iDia);
			        	
			        	//
			        	TestSelect(sNombre, iAnosServicio, tCal);
			        	break;
				case 3: System.out.println( "Insertar identificador" );
						iIdentificador = Integer.parseInt(dato.readLine());
			        	
			        	System.out.println(iIdentificador);
			        	//Creamos una instancia de Agente, buscándolo en la base de datos, dado el identificador
			        	Agente agenteActualizar = new Agente(iIdentificador);
			        	System.out.println(agenteActualizar.toString());
			        	//Modificamos los valores de los campos
			        	System.out.println("Modificar nombre");
			        	sNombre = dato.readLine();
			        	System.out.println("Modificar anos de servicio");
			        	iAnosServicio = Integer.parseInt(dato.readLine());
			        	System.out.println("Modificar la fecha de validez de la licencia (dd/mm/yyyy)");
			        	System.out.println("Dia: "); iDia = Integer.parseInt(dato.readLine());
			        	System.out.println("Mes: "); iMes = Integer.parseInt(dato.readLine());
			        	System.out.println("Año: "); iAno = Integer.parseInt(dato.readLine());
			        	
			        	
			        	tCal = Calendar.getInstance();
			        	tCal.set(iAno,iMes,iDia);
			        	
			        	agenteActualizar.setNombre(sNombre);
			        	agenteActualizar.setAnosServicio(iAnosServicio);
			        	agenteActualizar.setFechaValidezLicencia(tCal);
			        	
			        	//Actualizamos los valores del Agente
			        	TestUpdate(agenteActualizar);
			        	break;
				case 4: System.out.println( "Insertar identificador" );
						iIdentificador = dato.read();
						
						//Creamos una instancia de Agente, buscándolo en la base de datos, dado el identificador
						Agente agenteEliminar = new Agente(iIdentificador);
						
						//Eliminamos el Agente de la base de datos
						TestDelete( agenteEliminar );
						break;
				default: System.out.println( "Opcion incorrecta" );
			}
		}
}
